import axios from 'axios'
import { ElMessage } from 'element-plus';
class request {
  instance;
  isShowLoading;
  isLoading;
  constructor(config) {
    this.instance = axios.create(config);
    // this.isShowLoading=true;
    this.instance.interceptors.request.use(function (config) {
      let token = localStorage.getItem("token")
      if (token) {
        config.headers.Authorization = "Bearer " + token
      }
      // 在发送请求之前做些什么
      return config;
    }, function (error) {
      // 对请求错误做些什么
      return Promise.reject(error);
    });

    // 添加响应拦截器
    this.instance.interceptors.response.use(function (response) {
      // 2xx 范围内的状态码都会触发该函数。
      // 对响应数据做点什么
      return response;
    }, function (error) {
      // 超出 2xx 范围的状态码都会触发该函数。
      // 对响应错误做点什么
      switch (error.response.status) {
        case 400:
          ElMessage.error('请求失败' || error.response.data)
          break;
        case 401:
          ElMessage.error('未登录,没权限' || error.response.data)
          break;
        case 403:
          ElMessage.error('拒绝访问' || error.response.data)
          break;
        case 404:
          ElMessage.error('请求错误' || error.response.data)
          break;
        case 500:
          ElMessage.error('服务器错误' || error.response.data)
          break;
      }
      return Promise.reject(error);
    });
  }
  request(config) {
    return new Promise((reslove, reject) => {
      this.instance.request(config).then(res => {
        reslove(res)

      }).catch((err) => {
        reject(err);
        alert(err.response.data)
        return err;
      })
    })
  }
  post(config) {
    return this.request({
      ...config,
      method: 'post'
    });
  }
  get(config) {
    return this.request({
      ...config,
      method: 'get'
    });
  }
  put(config) {
    return this.request({
      ...config,
      method: 'put'
    });
  }
  delete(config) {
    return this.request({
      ...config,
      method: 'delete'
    });
  }
}

export default request
